package com.ruoyi.crop.controller;

import cn.hutool.extra.cglib.CglibUtil;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.crop.api.domain.CityVo;
import com.ruoyi.crop.service.CityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import static com.ruoyi.common.core.web.domain.AjaxResult.success;

@RestController
@RequestMapping("cityVo")
public class CityVoController {

    @Autowired
    private CityService cityService;

    @RequestMapping("list")
    public AjaxResult list(){

        //查出city表里面的数据然后将每个城市对象转换为 CityVo 对象，并将转换后的 CityVo 对象列表返回。
        //stream() 方法将获取到的列表转换为一个流，使得可以在流上进行后续的操作。
        // 使用 Cglib 工具类将 city 对象复制转换为 CityVo 类型的对象。这一步是将原始的城市对象转换为视图对象
        List<CityVo> list = cityService.list().stream().map(city -> CglibUtil.copy(city, CityVo.class))
                .collect(Collectors.toList());
        
        //获取一级
        List<CityVo> oneLevelRegion = list.stream().filter(o -> Objects.equals(o.getType(), 1)).collect(Collectors.toList());

        //遍历一级
        oneLevelRegion.forEach(item ->{
            //获取二级
            List<CityVo> two = list
                    .stream()
                    .filter(o -> o.getPid().intValue()==item.getCityId().intValue())
                    .collect(Collectors.toList());
            //遍历二级
            two.forEach(items ->{
                //获取三级
                List<CityVo> tree = list
                        .stream()
                        .filter(o -> o.getPid().intValue()==items.getCityId().intValue())
                        .collect(Collectors.toList());

                items.setChild(tree);
            });
            item.setChild(two);
        });

         return success(oneLevelRegion);
    }
}
